package serveur;

import java.io.PrintWriter;
import java.util.Vector;

/**
 * 
 * Classe qui permet de gérer le serveur pour la communication et la gestion des cliens
 * 
 * @author Kevin Pozderec, Faycal Abka
 *
 */
public class GestionServeur {	
	
	/**Compteur permettant de tenir à jour le nombre de client connecté actuellement
	 * Utilisé pour donner un ID au client
	 */
	private int nb_client_courant;
	
	/*Liste des flux de sorties des utilisateurs actuellement connectes*/
	private Vector<PrintWriter> tableClients = new Vector<PrintWriter>();

	
	public GestionServeur (){
		nb_client_courant = 0;
	}
	
	/**
	 *  ajouter un client dans la liste
	 * @param out le flux de sortie
	 * @return l'id du client
	 */
	synchronized public int ajouterClient(PrintWriter out) {
		nb_client_courant++;
		tableClients.addElement(out);
		return tableClients.size() - 1;
	}

	/**
	 * suppression du client deconnecté de la table des clients connectés.
	 * @param id du client qui vient de se déconencter.
	 */
	synchronized public void retirerClient(int id) {
		if ( nb_client_courant == 0)
			return ;
		nb_client_courant--;
		if (tableClients.elementAt(id) != null) {
			tableClients.removeElementAt(id);
		}
	}

	/**
	 * Envoie de message à tous les clients connectes
	 */
	synchronized public void sendToAll(String message, String last) {
		PrintWriter out;
		for (int i = 0; i < tableClients.size(); i++) {
			out = (PrintWriter) tableClients.elementAt(i);
			if (out != null) {
				out.print(message + last);
				out.flush();
			}
		}
	}

	/**
	 * Renvoie le nombre de clients connectés
	 * @return int
	 */
	synchronized public int getNombreClient() {
		return nb_client_courant;
	}
	
}
